/***************************************************************************
 创建者: hualei
 开始时间: 2018.9.10
 copyright: (C) 深圳市华友高科有限公司
 修改说明: (每次有修改就添加一条，带有 修改人，修改时间，修改描述)
 example (1) hualei 2018.9.10 类的具体实现代码编写

 ***************************************************************************
 *  @file ftpprogressdialog.h
 *  功能: 提供FTP 下载丶上传文件操作时传输进度条临时视图窗口
 *
 ***************************************************************************/
#ifndef FTPPROGRESSDIALOG_H
#define FTPPROGRESSDIALOG_H

#include <QDialog>
#include "ftpmanage.h"
#include <QObject>
#include "ftpprogressdialog_global.h"
#include <QDateTime>

/**
 * @brief ftpManage             引用全局FtpManage对象
 */
extern FtpManage *ftpManage;

namespace Ui {
class FtpProgressDialog;
}

/**
 * @brief The FtpProgressDialog class       提供FTP 下载丶上传文件操作时传输进度条临时视图窗口
 */
class FTPPROGRESSDIALOGSHARED_EXPORT FtpProgressDialog : public QDialog
{
    Q_OBJECT

public:
    /**
     * @brief FtpProgressDialog             构造函数
     * @param parent
     */
    explicit FtpProgressDialog(QWidget *parent = 0);
    ~FtpProgressDialog();

private:
    /**
     * @brief conversionSize    转换字节大小 (Bytes/KB/MB/GB)
     * @param totalBytes        传输文件字节大小
     * @return                  转换结果
     */
    QString conversionSize(qint64 totalBytes);

    /**
     * @brief transferSpeed     转换传输速率  (Bytes/S丶KB/S丶MB/S丶GB/S)
     * @param speed             文件传输速率
     * @return                  转换结果
     */
    QString transferSpeed(double speed);

private slots:
    /**
     * @brief on_sureBtn_clicked        点击确认按钮响应槽函数
     */
    void on_sureBtn_clicked();

public slots:

    /**
     * @brief updateProgressSlot        更新传输进度响应槽函数
     * @param readBytes                 已传输完成的文件字节数
     * @param totalBytes                传输文件总字节数
     */
    void updateProgressSlot(qint64 readBytes, qint64 totalBytes);

    /**
     * @brief currentGetFileSlot        当前下载文件响应槽函数
     * @param filePath                  当前下载文件路径
     */
    void currentGetFileSlot(const QString& filePath);

    /**
     * @brief currentPutFileSlot        当前上传文件响应槽函数
     * @param filePath                  当前上传文件路径
     */
    void currentPutFileSlot(const QString& filePath);

private:

    Ui::FtpProgressDialog *ui;
    /**
     * @brief currentGetFile            当前下载文件路径
     */
    QString currentGetFile;

    /**
     * @brief currentPutFile            当前上传文件路径
     */
    QString currentPutFile;

    /**
     * @brief downloadTime              下载时间对象
     */
    QTime downloadTime;

    /**
     * @brief m_nTime                   已下载耗时
     */
    int m_nTime;
};

#endif // FTPPROGRESSDIALOG_H
